package com.hujing.springsource.a12;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * jdk动态代理实现测试类
 * jdk动态代理是通过实现接口实现的,jdk的动态代理类与目标类是兄弟间的关系
 */
public class JdkProxyDemo2 {

    public static void main(String[] args) {
        // 创建目标对象
        Target target = new Target();
        ClassLoader loader = JdkProxyDemo2.class.getClassLoader();
        // 生成target对象的代理对象
        Foo proxy = (Foo) Proxy.newProxyInstance(loader, new Class[]{Foo.class}, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("before invoke");
                Object result = method.invoke(target, args);
                System.out.println("after invoke");
                return result;
            }
        });

        //调用目标方法
        proxy.foo();
    }
}

interface Foo {
    void foo();
}

class Target implements Foo{

    @Override
    public void foo() {
        System.out.println("foo");
    }
}
